package com.pactera.madp.cp.service.sync.template;

import com.pactera.madp.cp.context.SyncStateContext;
import org.springframework.transaction.annotation.Transactional;

/**
 * 同步系统数据单项数据处理（模板）
 */
public interface SyncItemService {

    /**
     * 将当前表昨日数据添加到历史表
     * 1、删除历史表昨日数据
     * 2、将当前表昨日数据插入到历史表
     */
    void addYesterdayToHis();

    /**
     * 将当前表昨日数据删除
     */
    void deleteYesterday();

    /**
     * 解析关联系统，将当前数据解析入库
     * 1、ftp获取数据（非必须）
     * 2、解析文件数据入库
     */
    void parse();

    /**
     * 删除历史表指定天数之前的数据
     */
    void deleteHisOneDay();

    /**
     * 将当前表数据同步到业务表中
     */
    void syncBusiness();

    /**
     * 整体处理流程
     */
    @Transactional(rollbackFor = Exception.class)
    default void handler(){
        // 1.0 将当前表昨日数据添加到历史表
        this.addYesterdayToHis();
        SyncStateContext.get().setSyncState(1);
        // 2.0 将当前表昨日数据删除
        this.deleteYesterday();
        SyncStateContext.get().setSyncState(2);
        // 3.0 解析关联系统数据文件，将当前数据解析入库
        this.parse();
        SyncStateContext.get().setSyncState(3);
        // 4.0 删除历史表指定天数之前的数据
        this.deleteHisOneDay();
        SyncStateContext.get().setSyncState(4);
        // 5.0 将当前表数据同步到业务表中
        this.syncBusiness();
        SyncStateContext.get().setSyncState(5);
    }

}
